Color OLED module library  v0.5
Library for the WaveShare 0.96-inch color OLED (SSD1331) module
ssd1331_fillRect.c
1 /*
2  * @file ssd1331_drawLine.c
3  *
4  * @author Matthew Matz
5  *
6  * @version 0.9
7  *
8  * @copyright Copyright (C) Parallax, Inc. 2019. See end of file for
9  * terms of use (MIT License).
10  *
11  * @brief 0.96-inch RGB OLED display bitmap driver, see ssd1331_h. for documentation.
12  *
13  * @detail Please submit bug reports, suggestions, and improvements to
14  * this code to editor@parallax.com.
15  */
16 
17 
18 #include "ssd1331.h"
19 
20 
21 void ssd1331_fillRect(screen_t* dev, int x0, int y0, int x1, int y1, int color) {
22  int mask_cs = (1 << dev->dev_id);
23  int mask_sdi = (1 << dev->sdi_pin);
24  int mask_clk = (1 << dev->clk_pin);
25  int mask_dc = (1 << dev->dc_pin);
26 
27  ssd1331_writeLockSet(dev->dev_id);
28 
29  ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_FILL, 0);
30  ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, 1, 0);
31 
32  ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, SSD1331_CMD_DRAWRECT, 0);
33  ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, x0, 0);
34  ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, y0, 0);
35  ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, x1, 0);
36  ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, y1, 0);
37 
38  ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, (color >> 11) << 1, 0);
39  ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, (color >> 5) & 0x3F, 0);
40  ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, (color << 1) & 0x3F, 0);
41  ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, (color >> 11) << 1, 0);
42  ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, (color >> 5) & 0x3F, 0);
43  ssd1331_writeByte(mask_cs, mask_sdi, mask_clk, mask_dc, (color << 1) & 0x3F, 0);
44 
45  // TODO: is this necessary?
46  int _tMark = CNT + (CLKFREQ / 4000);
47  while(_tMark > CNT); // Wait for system clock target
48 
49  ssd1331_writeLockClear(dev->dev_id);
50 }
51 
52 
53 void ssd1331_clearDisplay(screen_t* dev) {
54  ssd1331_fillRect(dev, 0, 0, dev->width - 1, dev->height - 1, 0);
55 }
56 
57